package com.sltx.service.impl;

import com.sltx.entity.Site;
import com.sltx.entity.SiteDto;
import com.sltx.mapper.SiteMapper;
import com.sltx.service.SiteService;
import com.sltx.util.PageData;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

@Service
public class SiteServiceImpl implements SiteService {

    @Autowired
    private SiteMapper siteMapper;
    //查询节点数据
    @Override
    public List<SiteDto> queryAll(PageData pd, HttpServletRequest request) {
        List<SiteDto> datas = new ArrayList<>();
        //获取全部数据
        List<Site> siteList = siteMapper.queryAll(pd);
        if (siteList != null) {
            //将这个数据赋值到dto里面
            List<SiteDto> children = siteList.stream().map((site) -> {
                SiteDto siteDto = new SiteDto();
                BeanUtils.copyProperties(site, siteDto);
                return siteDto;
            }).collect(Collectors.toList());
            //遍历全部的数据，利用递归思想，获取全部的子集
            children.forEach((e) -> {
                List<SiteDto> childrenList = this.getChildrenList(e.getLabel(), children);
                //设置子集,如果到了最后一级，那么直接设置为null，不展示这个属性即可
                e.setChildren(childrenList != null && !childrenList.isEmpty() ? childrenList : null);
            });
            //获取所有的顶点数据，即最上层数据,该数据的pid为1
            //注意这个pid的数据类型，如果数据库为varchar则equals("1") 整型则为equals(1)
            List<SiteDto> siteDtoParents = children.stream().filter(t -> t.getPname().equals("宁夏回族自治区人民政府")).collect(Collectors.toList());

            datas.addAll(siteDtoParents);
        }
        return datas;
    }

    private List<SiteDto> getChildrenList(String label, List<SiteDto> list) {
        //遍历全部数据，将需要的数据过滤出来
        return list.stream().filter(t -> t.getPname().equals(label)).collect(Collectors.toList());
    }
}
